package com.linkhub.oms.admin.modules.user.accountrecharge.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.linkhub.oms.admin.modules.user.accountrecharge.domain.param.*;
import com.linkhub.oms.admin.modules.user.accountrecharge.domain.vo.UserRechargeRecordDetailVO;
import com.linkhub.oms.admin.modules.user.accountrecharge.domain.vo.UserRechargeRecordMatchVO;
import com.linkhub.oms.admin.modules.user.accountrecharge.domain.vo.UserRechargeRecordVO;
import com.linkhub.oms.admin.modules.user.domain.param.BaseUserParam;
import com.linkhub.oms.admin.modules.user.domain.vo.MerchantBankCardVO;
import com.linkhub.oms.common.response.PageDTO;
import com.linkhub.oms.entity.UserRechargeRecordEntity;

import java.util.List;

/**
 * <p>
 * 用户充值记录表 服务类
 * </p>
 *
 * @author Frank
 * @since 2024-05-26
 */
public interface IUserRechargeRecordService extends IService<UserRechargeRecordEntity> {
    /**
     * 分页查询充值列表
     *
     * @param queryParam 查询参数
     * @return PageDTO<UserRechargeRecordVO>
     */
    PageDTO<UserRechargeRecordVO> getRechargeRecordPage(UserAccountRechargeQueryParam queryParam);

    /**
     * 充值详情
     * @param transactionId 交易id
     * @return UserRechargeRecordDetailVO
     */
    UserRechargeRecordDetailVO getRechargeRecordDetail(String transactionId);

    /**
     * 提交充值
     * @param userRechargeRecordAddParam userRechargeRecordAddParam
     */
    void submitRecharge(UserRechargeRecordAddParam userRechargeRecordAddParam);

    /**
     * 充值审核通过
     * @param userRechargeRecordUpdParam userRechargeRecordUpdParam
     */
    void auditRechargeSuc(UserRechargeRecordUpdParam userRechargeRecordUpdParam);

    /**
     * 充值审核拒绝
     * @param userRechargeRecordRefuseParam userRechargeRecordRefuseParam
     */
    void auditRechargeFail(UserRechargeRecordRefuseParam userRechargeRecordRefuseParam);

    /**
     * 校验银行流水
     * @param userRechargeRecordCheckParam userRechargeRecordCheckParam
     * @return true 通过
     */
    boolean checkBankStatement(UserRechargeRecordCheckParam userRechargeRecordCheckParam);

    /**
     * 查询商户银行卡
     * @param merchantUserId 商户id
     * @param baseUserParam baseUserParam
     * @return List<MerchantBankCardVO>
     */
    List<MerchantBankCardVO> getPayBankCard(String merchantUserId, BaseUserParam baseUserParam);

    /**
     * 收款银行流水号
     * @param receivedBankStatements 收款银行流水号
     * @return List<UserRechargeRecordMatchVO>
     */
    List<UserRechargeRecordMatchVO> listByReceivedBankStatement(List<String> receivedBankStatements);
}
